#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>
#include <QVector>
#include <QPoint>
#include <QMouseEvent>
#include <QPaintEvent>
#include <QPixmap>

namespace Ui {
class MainWidget;
}

class MainWidget : public QWidget
{
    Q_OBJECT

public:
    explicit MainWidget(QWidget *parent = 0);
    ~MainWidget();

    // 重写鼠标事件的处理
    void mouseMoveEvent(QMouseEvent *event) override;      // 鼠标移动事件
    void mousePressEvent(QMouseEvent *event) override;     // 鼠标按下事件
    void mouseReleaseEvent(QMouseEvent *event) override;   // 鼠标释放事件
    void mouseDoubleClickEvent(QMouseEvent *event) override;// 鼠标双击事件

    // 重写绘制事件的处理
    void paintEvent(QPaintEvent *event) override;           // 绘制事件

private:
    Ui::MainWidget *ui;

    // 用于表示签名的集合(一个签名由多条线组成，一条线由多个点组成)
    QVector<QVector<QPoint>> lines;
    QVector<QPoint> newLine;    // 记录当前绘制的一笔

    // 保存签名
    void saveSign();

    // 缓存图像（用于存储已绘制的结果。在缓存图像上绘制新增线段的部分，并在paintEvent的最后把它绘制到实际的窗口上，从而实现了增量绘制并保留历史绘制结果）
    QPixmap cachedImage;
};

#endif // MAINWIDGET_H
